using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;

namespace InseSoft.Models.Entities
{
    public class Usuario: CatalogEntityWithCia, IUsuario
    {
        private static IUsuario emptyInstance;

        public Usuario()
        {
            Cotizacions = new List<Cotizacion>();
            SolicitudCotizaciones = new List<SolicitudCotizacion>();
            Permisos = new List<Permiso>();
        }
        
        public string NombreUsuario { get; set; }
        [DataType(DataType.Password)]
        public string Clave { get; set; }
        public bool Cotizar { get; set; }
        public bool Borrar { get; set; }
        public bool Crear { get; set; }
        public virtual ICollection<Cotizacion> Cotizacions { get; set; }
        public virtual ICollection<SolicitudCotizacion> SolicitudCotizaciones { get; set; }
        public virtual ICollection<Permiso> Permisos { get; set; }

        [NotMapped]
        public static IUsuario EmptyInstance
        {
            get { return emptyInstance ?? (emptyInstance = new Usuario()); }
        }

        public bool CanAccessMenu(string menuName)
        {
            return Permisos.Any(p => p.Nombre.Replace(".", "") == menuName
                                  && p.Tipo == "M");
        }

        IUsuario IUsuario.EmptyInstance
        {
            get { return EmptyInstance; }
        }
    }
}
